﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess;
using System.Data.OracleClient;
using EntitiesLayer.Entities;
using System.Data;

namespace DataLayer.DAO
{
    public class PacientesClinicaDAO
    {
        private Connection.ConnectionClinica cn;
        private OracleConnection objCn;

        public PacientesClinicaDAO()
        {
            cn = new Connection.ConnectionClinica();
            objCn = cn.Conecta();
        }

        public List<Pacientes> buscarPacientes(string apellido, string nombre)
        {
            List<Pacientes> lstObject = new List<Pacientes>();

            try
            {
                OracleCommand cmd = new OracleCommand("BUSCARPACIENTECRITERIO", objCn);
                objCn.Open();
                cmd.Connection = objCn;
                cmd.CommandTimeout = 60;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new OracleParameter("RECORDSET", OracleType.Cursor, 100, ParameterDirection.Output, null, DataRowVersion.Current, false, null));
                cmd.Parameters.Add(new OracleParameter("v_apellido", OracleType.NVarChar, 50, ParameterDirection.Input, false, 10, 0, null, DataRowVersion.Current, apellido.Trim().ToLower()));
                cmd.Parameters.Add(new OracleParameter("v_nombre", OracleType.NVarChar, 50, ParameterDirection.Input, false, 10, 0, null, DataRowVersion.Current, nombre.Trim().ToLower()));               
                using (IDataReader oRead = cmd.ExecuteReader(CommandBehavior.SingleResult))
                {
                    if (oRead != null)
                    {
                        while (oRead.Read())
                        {
                            Pacientes oPacientes = new Pacientes();

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_HHCC")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_HHCC")).ToString()))
                                {
                                    oPacientes.VPAC_HHCC = oRead.GetString(oRead.GetOrdinal("VPAC_HHCC"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("IPAC_NRO_DOCUMENTO")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("IPAC_NRO_DOCUMENTO")).ToString()))
                                {
                                    oPacientes.IPAC_NRO_DOCUMENTO = oRead.GetString(oRead.GetOrdinal("IPAC_NRO_DOCUMENTO"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_APELLIDOS")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_APELLIDOS")).ToString()))
                                {
                                    oPacientes.VPAC_APELLIDOS = oRead.GetString(oRead.GetOrdinal("VPAC_APELLIDOS"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_NOMBRES")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_NOMBRES")).ToString()))
                                {
                                    oPacientes.VPAC_NOMBRES = oRead.GetString(oRead.GetOrdinal("VPAC_NOMBRES"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_EMAIL")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_EMAIL")).ToString()))
                                {
                                    oPacientes.VPAC_EMAIL = oRead.GetString(oRead.GetOrdinal("VPAC_EMAIL"));
                                }
                            }


                            if (!oRead.IsDBNull(oRead.GetOrdinal("DPAC_NACIMIENTO")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetDateTime(oRead.GetOrdinal("DPAC_NACIMIENTO")).ToString()))
                                {
                                    oPacientes.DPAC_NACIMIENTO = oRead.GetDateTime(oRead.GetOrdinal("DPAC_NACIMIENTO"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_TELEF_FIJO")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_TELEF_FIJO")).ToString()))
                                {
                                    oPacientes.VPAC_TELEF_FIJO = oRead.GetString(oRead.GetOrdinal("VPAC_TELEF_FIJO"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_CELULAR")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_CELULAR")).ToString()))
                                {
                                    oPacientes.VPAC_CELULAR = oRead.GetString(oRead.GetOrdinal("VPAC_CELULAR"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_DIRECCION")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_DIRECCION")).ToString()))
                                {
                                    oPacientes.VPAC_DIRECCION = oRead.GetString(oRead.GetOrdinal("VPAC_DIRECCION"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VPAC_CENTRO_TRABAJO")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VPAC_CENTRO_TRABAJO")).ToString()))
                                {
                                    oPacientes.VPAC_CENTRO_TRABAJO = oRead.GetString(oRead.GetOrdinal("VPAC_CENTRO_TRABAJO"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("Vpac_Sexo")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("Vpac_Sexo")).ToString()))
                                {
                                    oPacientes.VPAC_SEXO = oRead.GetString(oRead.GetOrdinal("Vpac_Sexo"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("Vtips_Cod_Tipo_Seguro")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("Vtips_Cod_Tipo_Seguro")).ToString()))
                                {
                                    oPacientes.VTIPS_COD_TIPO_SEGURO = oRead.GetString(oRead.GetOrdinal("Vtips_Cod_Tipo_Seguro"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("Vpac_Cod_Iafa")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("Vpac_Cod_Iafa")).ToString()))
                                {
                                    oPacientes.VPAC_COD_IAFA = oRead.GetString(oRead.GetOrdinal("Vpac_Cod_Iafa"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("IPAC_NRO_HAB_HOSP")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetInt32(oRead.GetOrdinal("IPAC_NRO_HAB_HOSP")).ToString()))
                                {
                                    oPacientes.IPAC_NRO_HAB_HOSP = oRead.GetInt32(oRead.GetOrdinal("IPAC_NRO_HAB_HOSP"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("Vdoc_Cod_Tip_Doc")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("Vdoc_Cod_Tip_Doc")).ToString()))
                                {
                                    oPacientes.VDOC_COD_TIP_DOC = oRead.GetString(oRead.GetOrdinal("Vdoc_Cod_Tip_Doc"));
                                }
                            }

                            if (!oRead.IsDBNull(oRead.GetOrdinal("VUBI_COD_UBI")))
                            {
                                if (!string.IsNullOrEmpty(oRead.GetString(oRead.GetOrdinal("VUBI_COD_UBI")).ToString()))
                                {
                                    oPacientes.VUBI_COD_UBI = oRead.GetString(oRead.GetOrdinal("VUBI_COD_UBI"));
                                }
                            }


                            lstObject.Add(oPacientes);
                            oPacientes = null;
                        }
                    }
                }

            }
            catch (Exception ex)
            {
                objCn.Dispose();
            }
            finally
            {

                if (objCn != null)
                {
                    objCn.Close();
                }

            }

            return lstObject;

        }


        public Pacientes getpaciente(string Txthhcc)
        {
            Pacientes p = new Pacientes();

            using (OracleCommand cmd = new OracleCommand("RECUPERAR", objCn))
            {
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter refParameter = new OracleParameter();
                refParameter.ParameterName = "RECORDSET";
                refParameter.OracleType = OracleType.Cursor;
                refParameter.Direction = ParameterDirection.Output;

                OracleParameter idParameter = new OracleParameter();
                idParameter.ParameterName = "ID_PACI";
                idParameter.OracleType = OracleType.NVarChar;
                idParameter.Size = 50;
                idParameter.Direction = ParameterDirection.Input;
                idParameter.Value = Txthhcc;

                cmd.Parameters.Add(refParameter);
                cmd.Parameters.Add(idParameter);

                try
                {
                    objCn.Open();

                    OracleDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        p.VPAC_APELLIDOS = dr.GetString(dr.GetOrdinal("VPAC_APELLIDOS"));
                        p.VPAC_NOMBRES = dr.GetString(dr.GetOrdinal("VPAC_NOMBRES"));
                        p.IPAC_NRO_DOCUMENTO = dr.GetString(dr.GetOrdinal("IPAC_NRO_DOCUMENTO"));
                        p.VPAC_TELEF_FIJO = dr.GetString(dr.GetOrdinal("VPAC_TELEF_FIJO"));
                        p.VPAC_CELULAR = dr.GetString(dr.GetOrdinal("VPAC_CELULAR"));
                        p.VPAC_EMAIL = dr.GetString(dr.GetOrdinal("VPAC_EMAIL"));
                        p.VPAC_DIRECCION = dr.GetString(dr.GetOrdinal("VPAC_DIRECCION"));
                        p.DPAC_NACIMIENTO = Convert.ToDateTime(dr.GetString(dr.GetOrdinal("DPAC_NACIMIENTO")));
                        p.VPAC_CENTRO_TRABAJO = dr.GetString(dr.GetOrdinal("VPAC_CENTRO_TRABAJO"));
                        p.VPAC_SEXO = dr.GetString(dr.GetOrdinal("VPAC_SEXO"));
                        p.VTIPS_COD_TIPO_SEGURO = dr.GetString(dr.GetOrdinal("VTIPS_COD_TIPO_SEGURO"));
                        p.VPAC_COD_IAFA = dr.GetString(dr.GetOrdinal("VPAC_COD_IAFA"));
                        p.IPAC_NRO_HAB_HOSP = Convert.ToInt32(dr.GetString(dr.GetOrdinal("IPAC_NRO_HAB_HOSP")));
                        p.VDOC_COD_TIP_DOC = dr.GetString(dr.GetOrdinal("VDOC_COD_TIP_DOC"));
                    }
                }
                catch (Exception ex)
                {
                    objCn.Dispose();
                }
                finally
                {
                    objCn.Close();
                }
            }
            return p;
        }
        }
    }
